在第 23 天,我們專注於提高 Line Bot 的回應速度,以提供更加流暢的用戶體驗。回應速度的優化包括減少後端邏輯的處理時間、使用緩存技術來減少延遲、以及改進 API 調用的效率。
首先需要找到影響 Bot 回應速度的瓶頸,這通常可以分為以下幾個方面:
長處理時間的邏輯:
網絡延遲:
I/O 操作:
優化邏輯流程:
cProfile
庫來檢查哪部分代碼最耗費時間,並進行優化。異步處理:
Flask
中的 Celery
或 asyncio
來處理某些非關鍵即時的任務。from flask import Flask, request
import asyncio
app = Flask(__name__)
@app.route('/callback', methods=['POST'])
def callback():
# 異步處理用戶消息
asyncio.create_task(handle_user_message(request.json))
return 'OK', 200
async def handle_user_message(event):
# 模擬耗時操作
await asyncio.sleep(5)
print("處理完成")
緩存重複的查詢結果:
Redis
這樣的內存數據庫作為緩存來存儲頻繁查詢的數據,以減少對數據庫的訪問。例如,當用戶請求天氣信息時,可以緩存最近幾分鐘的查詢結果,避免在短時間內多次調用外部 API。
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
def get_weather(city):
cached_weather = r.get(city)
if cached_weather:
return cached_weather.decode()
else:
# 調用外部 API 獲取天氣
weather = fetch_weather_from_api(city)
r.setex(city, 300, weather) # 緩存 5 分鐘
return weather
減少 I/O 操作:
批量請求:
選擇更高效的 API:
設置性能指標監控:
日誌分析:
例如,可以記錄每次處理請求的開始時間和結束時間,計算出處理每個請求的耗時,並將其保存到日誌中進行分析。
import time
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
@app.route('/callback', methods=['POST'])
def callback():
start_time = time.time()
# 處理用戶消息
# ...
end_time = time.time()
logging.info(f"請求處理耗時: {end_time - start_time} 秒")
return 'OK', 200
快速回應用戶:
@handler.add(MessageEvent, message=TextMessage)
def handle_text_message(event):
# 先快速回應
line_bot_api.reply_message(event.reply_token, TextSendMessage(text="請稍等,我正在處理您的請求..."))
# 然後進行耗時處理
process_long_task(event)
漸進式回應: